package 中等.动态规划.子序列;

/**
 * 给定两个单词 word1 和 word2 ，返回使得 word1 和  word2 相同所需的最小步数。
 * <p>
 * 每步 可以删除任意一个字符串中的一个字符。
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/delete-operation-for-two-strings/description/
 */
public class 两个字符串的删除操作_583 {

    public static void main(String[] args) {

        //word1 = "sea", word2 = "eat"


    }

    /**
     * 求删除的所需的最小步数换一种思路
     * 求  word1和word2的子序列相等的最大子序列长度，maxEqualLength
     * 得  word1.length+word2.length-2*maxEqualLength
     *
     * @param word1
     * @param word2
     * @return
     */
    public int minDistance(String word1, String word2) {
        int len1 = word1.length();
        int len2 = word2.length();
        int[][] dp = new int[len1 + 1][len2 + 1];
        for (int i = 1; i <= len1; i++) {
            char char1 = word1.charAt(i - 1);
            for (int j = 1; j <= len2; j++) {
                if (char1 == word2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }
        return len1 + len2 - 2 * dp[len1][len2];
    }

}
